package com.yqzl.controller;

import com.google.code.kaptcha.Constants;
import com.yqzl.entity.User;
import com.yqzl.service.User_basicService;
import com.yqzl.service.User_infoService;
import com.yqzl.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ObjectUtils;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;

@Slf4j
@RestController
public class UserController {
  @Resource
  private User_basicService user_basicService;
  @Resource
  private User_infoService user_infoService;

  //
  @PostMapping("/register")
  public Result register(@RequestBody User user) {
    log.info("User={}", user);
//     进行注册
//     保存用户基本信息
//     密码不要明文
    user_basicService.save(user);
//     保存用户详细信息  user_info的Uid要和  userBasic的uid 一样
    user.getUserinfo().setUid(user.getUid());
    user_infoService.save(user.getUserinfo());

    return Result.success().setMsg("注册成功");
  }

  @RequestMapping("/login")
  //   登录信息
  public Result login(@RequestBody User user, @SessionAttribute(Constants.KAPTCHA_SESSION_KEY) String picCode, HttpSession httpSession) {

    log.info("user={}， piccode={}", user, picCode);
    User user2 = user_basicService.getUserByUnameAndPwd(user);
//              密码和用户正确
    if (!ObjectUtils.isEmpty(user2) && user.getCaptcha().equals(picCode)) {
//        查询用户的基本信息
      user2.setUserinfo(user_infoService.getUserinfoByUid(user2.getUid()));
      httpSession.removeAttribute(Constants.KAPTCHA_SESSION_KEY);

//      保存用户信息到session 域
      httpSession.setAttribute("user", user2);
//       要立马删除session域的code，防止用户不刷新验证码在次提交注册
      return Result.success().setMsg("登录成功").setData(user2);
    } else {
      return Result.fail().setMsg("密码错误");
    }
  }

  //@SessionAttribute 注解:  默认必须 session必须 持有user对象；  boolean required() default true;
  @PostMapping("/uploadimage")
  public Result upload(@RequestParam("image") MultipartFile image, @SessionAttribute(value = "user", required = true) User user) throws IOException {
//     1 创建目录
    String path = ResourceUtils.getURL("classpath:").getPath();// /E:/IDEA_java_project/target/classes/
    File file = new File(path + "/public/images");
    if (!file.exists()) {  //不存在就新建该目录
      file.mkdirs();
    }
    String suffix;
//    2 处理 头像 转存到项目下
    if (!image.isEmpty()) {
      //     获取图片地后缀；也就是图片格式
      String contentType = image.getContentType();
      suffix = "image/jpeg".equals(contentType) ? ".jpg" : ".png";
      //       注意要带上 /
//      image.getOriginalFilename()  图片的名字；这里也可以自定义       根据 uid 作为图片名；
      image.transferTo(new File(file.getAbsoluteFile() + "\\" + user.getUserinfo().getUid() + suffix));
      //       数据库 也要同步更新
      user_infoService.updateImageByUid(user.getUserinfo().getUid(), "/images/" + user.getUserinfo().getUid() + suffix);
      user.getUserinfo().setImagepath("/images/" + user.getUserinfo().getUid() + suffix);
    } else {
      return Result.fail().setMsg("上传照片不能为空");
    }

//    3  回发照片在项目上地路径
    System.out.println(image);
    HashMap<Object, Object> hashMap = new HashMap<>();
    hashMap.put("imagepath", "/images/" + user.getUserinfo().getUid() + suffix);

//
    return Result.success(hashMap).setMsg("上传成功！");
  }


//  提供一个接口判断用户 是否登录； session 机制

  @RequestMapping("/isLogin")
  public Result isLogin(@SessionAttribute(value = "user", required = false) User user) {
//    if (obj == null) {
//      return true;
//    }
    System.out.println(user);
    if (ObjectUtils.isEmpty(user)) {
      return Result.fail("", 500, "你还未登录");
    }
    return Result.success(user).setMsg("已登录");

  }


}
